<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // JS中得函数形态
        //      JS得函数一种特殊得数据类型变量
        // 形态1：声明式函数
        //       语法： function 函数名(参数列表){ 参数体 }

        // 形态2：表达式函数(变量式函数)
        //       语法： let 变量名 = function(参数列表){参数体}
        let showFun1 = function(msg){
            console.log("表达式函数",msg);
        }
        showFun1("参数")  

        // 函数回调参数
        function execCallback( arg1, callback ){
            console.log(arg1);
            console.log(callback);
            callback(); // 调用函数
        }

        function fun1(){
            console.log("fun1");
        }

        execCallback( "字符串" , fun1 );

        // 回调函数得使用
        function sortArray(arr,callback){
            for (let i = 0; i < arr.length - 1; i++) {
                for (let j = 0; j < arr.length - i - 1; j++) {
                    // 被作为方法执行
                    //      设定 callback 函数执行后，会返回一个数值
                    //          如果 arr[j] - arr[j+1] > 0 表示需要升序
                    //          如果 arr[j+1] - arr[j] > 0 表示需要降序
                    //          如果相减 = 0 表示两个值相同不做调整
                    let tempNum = callback(arr[j],arr[j+1])

                    if( tempNum > 0 ){
                        let temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;
                    }
                }
            }
            // 返回结果
            return arr;
        }

        let nums = [26,16,98,41,93,38,90,64,12];

        let arr1 = sortArray( 
            nums,
            function(item1,item2){
                // console.log(item1,item2);
                // return 1;
                // 升序
                // return item1 - item2;
                // 降序
                return item2 - item1;
            } 
        );

        console.log(arr1);
        
    </script>
</head>
<body>
    
</body>
</html>